package com.powerbank.devicecenter.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 设备信息实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("device")
public class Device {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 设备编号
     */
    @TableField("device_code")
    private String deviceCode;

    /**
     * 设备名称
     */
    @TableField("device_name")
    private String deviceName;

    /**
     * 设备型号
     */
    @TableField("device_model")
    private String deviceModel;

    /**
     * 设备类型：CHARGER-充电宝，STATION-充电桩
     */
    @TableField("device_type")
    private String deviceType;

    /**
     * 设备状态：AVAILABLE-可用，OCCUPIED-占用，FAULT-故障，MAINTENANCE-维护，OFFLINE-离线
     */
    @TableField("status")
    private String status;

    /**
     * 电池容量（mAh）
     */
    @TableField("battery_capacity")
    private Integer batteryCapacity;

    /**
     * 当前电量百分比
     */
    @TableField("battery_level")
    private Integer batteryLevel;

    /**
     * 充电状态：CHARGING-充电中，DISCHARGING-放电中，IDLE-空闲
     */
    @TableField("charging_status")
    private String chargingStatus;

    /**
     * 小时租金（元/小时）
     */
    @TableField("hourly_rate")
    private BigDecimal hourlyRate;

    /**
     * 押金金额
     */
    @TableField("deposit_amount")
    private BigDecimal depositAmount;

    /**
     * 位置经度
     */
    @TableField("longitude")
    private BigDecimal longitude;

    /**
     * 位置纬度
     */
    @TableField("latitude")
    private BigDecimal latitude;

    /**
     * 详细地址
     */
    @TableField("address")
    private String address;

    /**
     * 所属站点ID
     */
    @TableField("station_id")
    private Long stationId;

    /**
     * 厂商
     */
    @TableField("manufacturer")
    private String manufacturer;

    /**
     * 硬件版本
     */
    @TableField("hardware_version")
    private String hardwareVersion;

    /**
     * 固件版本
     */
    @TableField("firmware_version")
    private String firmwareVersion;

    /**
     * IMEI号
     */
    @TableField("imei")
    private String imei;

    /**
     * SIM卡号
     */
    @TableField("sim_card")
    private String simCard;

    /**
     * 网络信号强度
     */
    @TableField("signal_strength")
    private Integer signalStrength;

    /**
     * 在线状态：0-离线，1-在线
     */
    @TableField("online_status")
    private Integer onlineStatus;

    /**
     * 故障代码
     */
    @TableField("fault_code")
    private String faultCode;

    /**
     * 故障描述
     */
    @TableField("fault_description")
    private String faultDescription;

    /**
     * 省份
     */
    @TableField("province")
    private String province;

    /**
     * 城市
     */
    @TableField("city")
    private String city;

    /**
     * 区县
     */
    @TableField("district")
    private String district;

    /**
     * 最后心跳时间
     */
    @TableField("last_heartbeat")
    private LocalDateTime lastHeartbeat;

    /**
     * 最后在线时间
     */
    @TableField("last_online")
    private LocalDateTime lastOnline;

    /**
     * 启用状态：1-启用，0-禁用
     */
    @TableField("enabled")
    private Integer enabled;

    /**
     * 累计使用次数
     */
    @TableField("usage_count")
    private Integer usageCount;

    /**
     * 累计使用时长（分钟）
     */
    @TableField("total_usage_time")
    private Integer totalUsageTime;

    /**
     * 购买日期
     */
    @TableField("purchase_date")
    private LocalDateTime purchaseDate;

    /**
     * 保修到期日期
     */
    @TableField("warranty_expire_date")
    private LocalDateTime warrantyExpireDate;

    /**
     * 备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 创建时间
     */
    @TableField(value = "created_time", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}